JavaScript 學習筆記 - Conversior


Posted by hata0833 on 2022-09-02

https://wangdoc.com/javascript/features/conversion.html

強制轉換

使用 Number() String() Boolean手動轉換

Number()

// 数值:转换后还是原来的值
Number(324) // 324

// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324

// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN

// 空字符串转为0
Number('') // 0

// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

和parseInt的區別:parseInt是逐個解析,而Number只要遇到有一個字符不能轉成數,就會被轉為NaN
相同:都會去掉前導和空格

parseInt('42 cats') // 42
Number('42 cats') // NaN

遇到對象

只有包含單個數字的數組可以被轉換,其餘都是NaN

Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

記住對象轉換成基本數據類型的步驟:valueOf() -> toString()
在這裡不必走完,任一有值就可以返回

  1. 在Number中,如果valueOf返回原始類型的值,直接對該值使用Number,然後返回
    譬如Number([5])
  2. 如果valueOf返回對象,就調用toString,返回基本類型的值就進行轉換,然後返回
  3. valueOf()toString() 都返回對象 -> 報錯
var obj = {x: 1};
Number(obj) // NaN

// 等同于
if (typeof obj.valueOf() === 'object') {
  Number(obj.toString());
} else {
  Number(obj.valueOf());
}

String()

和Number差不多

String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"

遇到對象

valueOf() -> toString()

Number()valueOf() / toString()

Boolean

除了五種,其他都是true

  1. undefined
  2. null
  3. 0 (+0 / -0)
  4. NaN
  5. '' (空字符串)
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false

所有對象轉成布爾值都是true,包含false布爾對象new Boolean(false)

出於性能考量,避免對象計算得值

自動轉換

  1. 運算符 +
    123 + 'abc' // "123abc"
    
  2. 對非布爾值求布爾值
    if('abc') {
     console.log('hello')
    } // hello
    // 或是
    !'abc' // false
    !!'abc' // true
    
  3. 對非數值類型使用一元運算符
    一般是轉換正負號
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN

null转为数值时为0,而undefined转为数值时为NaN。


#javascript







Related Posts

redis 套件的 Property 'on' does not exist on type 'RedisClientType'

redis 套件的 Property 'on' does not exist on type 'RedisClientType'

留言板、API篇

留言板、API篇

筆記 課程中SQL command 轉SQLite

筆記 課程中SQL command 轉SQLite


Comments